#include<vector>
#include<iostream>
#include<cmath>
using namespace std;

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};


// 问题： ASCII码的问题，如何生成正确的字符？
class Solution {
public:
    vector<string> path;

    char get_word(int num) {
        // get_word 的实现和使用有错误。'a' + num - 32 这段没有意义。num 是整数节点值（通常是 0–25），如果想把数字映射成小写字母，应该写成
        // return 'a' + num;
        // 而不是减去 32（那是大写字母的 ASCII 转换方式）。
        return (char)('a' + num - 32);
    }

    void dfs(TreeNode* root, string cur){
        if (!root) return;

        if (!root->left && !root->right) {
            path.push_back(cur);
            return;
        }

        if (root->left){
            dfs(root->left, get_word(root->left->val) + cur);
        }

        if (root->right) {
            dfs(root->right, get_word(root->right->val) + cur);
        }
    }

    string smallestFromLeaf(TreeNode* root) {
        if (!root) return "";

        // smallestFromLeaf 中 to_string(get_word(root->val)) 是错误的。get_word 返回 char，to_string 
        // 会把它转换成 ASCII 码数字字符串，而不是字母。例如 get_word(0) 返回 'a'，to_string('a') 会变成 "97"。
        string cur = to_string(get_word(root->val));
        cout << cur << endl;
        dfs(root, cur);

        for (auto &x : path) {
            cout << x << endl;
         }

        return "";
    }
};